home *** CD-ROM | disk | FTP | other *** search
/ Game.EXE 2001 January / Game.EXE_01_2001.iso / demos / Blade of Darkness / data1.cab / Program_Executable_Files / Lib / EnmGenRnd.pyc (.txt) < prev    next >
Encoding:
Python Compiled Bytecode  |  2000-11-16  |  15.3 KB  |  420 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 1.5)
  3.  
  4. import Bladex
  5. import B3DLib
  6. import EnemyTypes
  7. import Actions
  8. import ItemTypes
  9. import math
  10. import Sounds
  11. import darfuncs
  12. import GameStateAux
  13. import ObjStore
  14. import whrandom
  15.  
  16. def EnemyReady(ent_name):
  17.     print "Borrando '" + ent_name + "quad'"
  18.     o = Bladex.GetEntity(ent_name + 'quad')
  19.     if o:
  20.         o.SubscribeToList('Pin')
  21.     
  22.     char = Bladex.GetEntity('Player1')
  23.     enm = Bladex.GetEntity(ent_name)
  24.     Bladex.AddScheduledFunc(Bladex.GetTime(), enm.SetOnFloor, ())
  25.     enm.InitPos = pos = enm.Position
  26.     v = (char.Position[0] - pos[0], 0.0, char.Position[2] - pos[2])
  27.     v = B3DLib.Normalize(v)
  28.     alfa = -(3.14159 / 2.0) * (v[0] / abs(v[0])) + math.atan(v[2] / v[0])
  29.     enm.Face(alfa)
  30.     enm.Blind = 0
  31.     enm.Deaf = 0
  32.  
  33.  
  34. class Point:
  35.     
  36.     def __init__(self):
  37.         self.Name = 'Skl'
  38.         self.EnemyType = 'Skeleton'
  39.         self.WeaponType = ''
  40.         self.WeaponBreak = 0
  41.         self.ShieldType = ''
  42.         self.ShieldBreak = 0
  43.         self.Animation = ''
  44.         self.Position = [
  45.             0,
  46.             0,
  47.             0]
  48.         self.Level = None
  49.  
  50.  
  51.  
  52. class EnmGenRnd:
  53.     ObjId = 0
  54.     Active = 0
  55.     Ready = 0
  56.     NEnemies = 4
  57.     NextEnemy = 0
  58.     InitGenFunc = ''
  59.     GenerateNotifyFunc = ''
  60.     FinishGenFunc = ''
  61.     InitGenArgs = ()
  62.     NPoints = 0
  63.     OnceEnm = 1
  64.     EnmActivates = 0
  65.     FinishGen = 0
  66.     Points = [
  67.         0]
  68.     Enemies = [
  69.         0]
  70.     p = 0
  71.     N_EnmGen = 0
  72.     DifTime = 0
  73.     VirGenPos = [
  74.         0,
  75.         0,
  76.         0]
  77.     Last_Point = 0
  78.     NumDeaths = 0
  79.     Level = 0
  80.     SonidoGen = None
  81.     
  82.     def __init__(self):
  83.         self.ObjId = ObjStore.GetNewId()
  84.         ObjStore.ObjectsStore[self.ObjId] = self
  85.         self.VirGenPos = [
  86.             0,
  87.             0,
  88.             0]
  89.         self.Points = [
  90.             0]
  91.         self.Enemies = [
  92.             0]
  93.  
  94.     
  95.     def GeneratorReady(self, ent_name):
  96.         print 'Enemigo muero'
  97.         self.NumDeaths = self.NumDeaths - 1
  98.         if self.NumDeaths == 0:
  99.             if self.OnEnd:
  100.                 self.OnEnd()
  101.             
  102.         else:
  103.             print 'Quedan ', self.NumDeaths, 'Enemigos'
  104.         enm = Bladex.GetEntity(ent_name)
  105.         enm.Data.ImDeadFuncX(ent_name)
  106.         self.Enemies[enm.Data.NEnemy] = 0
  107.         self.EnmActivates = self.EnmActivates - 1
  108.         self.GenerateEnemy()
  109.         if self.FinishGen and self.EnmActivates == 0:
  110.             if self.FinishGenFunc:
  111.                 apply(self.FinishGenFunc, (self,))
  112.             
  113.         
  114.  
  115.     
  116.     def ActivateEnemy(self, point):
  117.         enm = self.Enemies[self.NextEnemy]
  118.         if enm:
  119.             darfuncs.UnhideBadGuy(enm.Name)
  120.             enm.Blind = 1
  121.             enm.Deaf = 1
  122.             enm.Position = self.Points[point].Position
  123.             enm.Data.NEnemy = self.NextEnemy
  124.         
  125.         return enm
  126.  
  127.     
  128.     def GenerateEnemy(self):
  129.         enmgen = self
  130.         char = Bladex.GetEntity('Player1')
  131.         charpos = char.Position
  132.         lpt = self.Last_Point
  133.         point = self.GetBestGenerationPoint(charpos)
  134.         self.Last_Point = lpt
  135.         if not darfuncs.ValidAppear(self.Points[point].Position):
  136.             Bladex.AddScheduledFunc(Bladex.GetTime() + 5.0, self.GenerateEnemy, ())
  137.             return None
  138.         
  139.         if enmgen.Ready:
  140.             nenemies = enmgen.OnceEnm - enmgen.EnmActivates
  141.             if self.DifTime == 0:
  142.                 if nenemies > 1:
  143.                     if enmgen.NextEnemy + nenemies >= enmgen.NEnemies:
  144.                         nenemies = enmgen.NEnemies - enmgen.NextEnemy
  145.                         enmgen.Deactivate()
  146.                         enmgen.FinishGen = 1
  147.                     
  148.                 elif enmgen.NextEnemy + 1 >= enmgen.NEnemies:
  149.                     enmgen.Deactivate()
  150.                     enmgen.FinishGen = 1
  151.                 
  152.             elif nenemies > 1:
  153.                 if enmgen.NextEnemy + nenemies >= enmgen.NEnemies:
  154.                     nenemies = enmgen.NEnemies - enmgen.NextEnemy
  155.                     enmgen.Deactivate()
  156.                     enmgen.FinishGen = 1
  157.                 
  158.                 if nenemies > 1:
  159.                     Bladex.AddScheduledFunc(Bladex.GetTime() + self.DifTime + whrandom.random(), self.GenerateEnemy, ())
  160.                     nenemies = 1
  161.                 
  162.             elif enmgen.NextEnemy + 1 >= enmgen.NEnemies:
  163.                 enmgen.Deactivate()
  164.                 enmgen.FinishGen = 1
  165.             
  166.             enmgen.EnmActivates = enmgen.EnmActivates + nenemies
  167.             t = 0
  168.             for t in range(nenemies):
  169.                 point = self.GetBestGenerationPoint(charpos)
  170.                 enm = self.ActivateEnemy(point)
  171.                 pos = enm.Position
  172.                 enmgen.NextEnemy = enmgen.NextEnemy + 1
  173.                 v = (charpos[0] - pos[0], 0.0, charpos[2] - pos[2])
  174.                 v = B3DLib.Normalize(v)
  175.                 enm.Angle = alfa
  176.                 if enmgen.Points[point].Animation:
  177.                     enm.SetTmpAnmFlags(1, 1, 1, 0, 5, 1)
  178.                     enm.LaunchAnimation(enmgen.Points[point].Animation)
  179.                     enm.AnmEndedFunc = EnemyReady
  180.                     darfuncs.CreateFalseCube(enm.Position, -1, enm.Name)
  181.                 else:
  182.                     EnemyReady(enm.Name)
  183.                 Actions.TurnToFaceEntityNow(enm.Name, 'Player1')
  184.                 enm.Data.ImDeadFuncX = enm.ImDeadFunc
  185.                 enm.ImDeadFunc = self.GeneratorReady
  186.                 if enmgen.InitGenFunc:
  187.                     enmgen.SonidoGen.Position = pos
  188.                     enmgen.SonidoGen.PlaySound(0)
  189.                     apply(enmgen.InitGenFunc, (enm,))
  190.                 
  191.             
  192.         
  193.  
  194.     
  195.     def GetBestGenerationPoint(self, charpos):
  196.         point = self.p
  197.         if point + 1 >= self.NPoints:
  198.             self.p = 0
  199.         else:
  200.             self.p = self.p + 1
  201.         for i in range(self.NPoints):
  202.             if point != self.Last_Point:
  203.                 pos = self.Points[point].Position
  204.                 v = (charpos[0] - pos[0], 0.0, charpos[2] - pos[2])
  205.                 dist = v[0] * v[0] + v[2] * v[2]
  206.                 if dist > 3000000:
  207.                     self.Last_Point = point
  208.                     return point
  209.                 
  210.             
  211.             point = point + 1
  212.             if point >= self.NPoints:
  213.                 point = 0
  214.             
  215.         
  216.         self.Last_Point = point
  217.         return point
  218.  
  219.     
  220.     def AddPoint(self, pos, enemydscr = ('Skl', 'Skeleton', '', 0, '', 0), animation = '', Level = None):
  221.         point = Point()
  222.         point.Position = pos
  223.         point.Name = enemydscr[0]
  224.         point.EnemyType = enemydscr[1]
  225.         point.WeaponBreak = enemydscr[3]
  226.         point.WeaponType = enemydscr[2]
  227.         point.ShieldType = enemydscr[4]
  228.         point.ShieldBreak = enemydscr[5]
  229.         point.Animation = animation
  230.         point.Level = Level
  231.         self.Points[self.NPoints:self.NPoints] = [
  232.             point]
  233.         self.NPoints = self.NPoints + 1
  234.         self.NumDeaths = self.NumDeaths + 1
  235.  
  236.     
  237.     def CreateEnemy(self, i):
  238.         Rage = self.Points[i].EnemyType
  239.         Name = self.Points[0].Name + `self.N_EnmGen`
  240.         self.Points[i].Enm = enm = Bladex.CreateEntity(Name, Rage, self.VirGenPos[0], self.VirGenPos[1], self.VirGenPos[2], 'Person')
  241.         if self.Points[i].Level != None:
  242.             enm.Level = self.Points[i].Level
  243.         else:
  244.             enm.Level = self.Level
  245.         enm.Blind = 1
  246.         enm.Deaf = 1
  247.         if self.Points[i].WeaponType:
  248.             weapon = Bladex.CreateEntity('Weapon' + Name, self.Points[i].WeaponType, 0.0, 0.0, 0.0, 'Weapon')
  249.             ItemTypes.ItemDefaultFuncs(weapon)
  250.             Actions.TakeObject(Name, weapon.Name)
  251.             weapon.RemoveFromWorld()
  252.         
  253.         if self.Points[i].ShieldType:
  254.             shield = Bladex.CreateEntity('Shield' + Name, self.Points[i].ShieldType, 0.0, 0.0, 0.0, 'Weapon')
  255.             ItemTypes.ItemDefaultFuncs(shield)
  256.             Actions.TakeObject(Name, shield.Name)
  257.             shield.RemoveFromWorld()
  258.         
  259.         EnemyTypes.EnemyDefaultFuncs(enm)
  260.         enm.Data.enmgendata = self
  261.         darfuncs.HideBadGuy(enm.Name)
  262.         self.N_EnmGen = self.N_EnmGen + 1
  263.         return enm
  264.  
  265.     
  266.     def Activate(self):
  267.         if self.NextEnemy <= self.NEnemies:
  268.             self.Active = 1
  269.             self.Ready = 1
  270.             j = i = 0
  271.             for i in range(self.NEnemies):
  272.                 en = self.CreateEnemy(j)
  273.                 if self.CallBak:
  274.                     self.CallBak(en)
  275.                 
  276.                 self.Enemies[i:i] = [
  277.                     en]
  278.                 j = j + 1
  279.             
  280.         
  281.  
  282.     
  283.     def Deactivate(self):
  284.         self.Active = 0
  285.         self.Ready = 0
  286.  
  287.     
  288.     def persistent_id(self):
  289.         return self.ObjId
  290.  
  291.     
  292.     def __del__(self):
  293.         del ObjStore.ObjectsStore[self.ObjId]
  294.  
  295.     
  296.     def __GetNameEnemies__(self):
  297.         Names = []
  298.         for i in range(self.NEnemies):
  299.             pass
  300.         
  301.         return Names
  302.  
  303.     
  304.     def __GetPointsGeneration__(self):
  305.         Points = []
  306.         for i in range(self.NPoints):
  307.             Points.append((self.Points[i].Position, self.Points[i].Animation))
  308.         
  309.         return Points
  310.  
  311.     
  312.     def __SetEnemies__(self, enemies):
  313.         self.Enemies = []
  314.         for i in range(self.NEnemies):
  315.             pass
  316.         
  317.  
  318.     
  319.     def __SetPoints__(self, points):
  320.         self.Points = []
  321.         for i in range(self.NPoints):
  322.             p = Point()
  323.             p.Position = points[i][0]
  324.             p.Animation = points[i][1]
  325.             self.Points.append(p)
  326.         
  327.  
  328.     
  329.     def __getstate__(self):
  330.         stick_objId = None
  331.         return (1, self.ObjId, self.Ready, self.OnceEnm, self.EnmActivates, self.DifTime, self.NextEnemy, self.NEnemies, self.FinishGen, self.p, self.Active, self.NPoints, self.Last_Point, self.NumDeaths, GameStateAux.SaveFunctionAux(self.InitGenFunc), self.InitGenArgs, GameStateAux.SaveFunctionAux(self.GenerateNotifyFunc), GameStateAux.SaveFunctionAux(self.FinishGenFunc), self.__GetNameEnemies__(), self.__GetPointsGeneration__(), GameStateAux.SaveEntityAux(self.SonidoGen), GameStateAux.SaveNewMembers(self))
  332.  
  333.     
  334.     def __setstate__(self, parm):
  335.         if parm[0] == 1:
  336.             self.ObjId = parm[1]
  337.             ObjStore.ObjectsStore[self.ObjId] = self
  338.             self.Ready = parm[2]
  339.             self.OnceEnm = parm[3]
  340.             self.EnmActivates = parm[4]
  341.             self.DifTime = parm[5]
  342.             self.NextEnemy = parm[6]
  343.             self.NEnemies = parm[7]
  344.             self.FinishGen = parm[8]
  345.             self.p = parm[9]
  346.             self.Active = parm[10]
  347.             self.NPoints = parm[11]
  348.             self.Last_Point = parm[12]
  349.             self.NumDeaths = parm[13]
  350.             GameStateAux.LoadFunctionAux(parm[14], self, 'InitGenFunc')
  351.             self.InitGenArgs = parm[15]
  352.             GameStateAux.LoadFunctionAux(parm[16], self, 'GenerateNotifyFunc')
  353.             GameStateAux.LoadFunctionAux(parm[17], self, 'FinishGenFunc')
  354.             self.__SetEnemies__(parm[18])
  355.             self.__SetPoints__(parm[19])
  356.             self.SonidoGen = GameStateAux.LoadEntityAux(parm[20])
  357.             print 'EnmGenRnd.__setstate__ self.SonidoGen', self.SonidoGen
  358.             GameStateAux.LoadNewMembers(self, parm[21])
  359.         else:
  360.             print 'Warning -> Version mismatch in EnmGenRnd.'
  361.             self.Ready = 0
  362.             self.OnceEnm = 0
  363.             self.EnmActivates = 0
  364.             self.DifTime = 0
  365.             self.NextEnemy = 0
  366.             self.NEnemies = 0
  367.             self.FinisGen = 0
  368.             self.p = 0
  369.             self.Active = 0
  370.             self.NPoints = 0
  371.             self.Last_Point = 0
  372.             self.NumDeaths = 0
  373.             self.InitGenArgs = ()
  374.             self.InitGenFunc = None
  375.             self.GenerateNotifyFunc = None
  376.             self.FinishGenFunc = None
  377.             self.ObjId = ObjStore.GetNewId()
  378.             ObjStore.ObjectsStore[self.ObjId] = self
  379.  
  380.  
  381.  
  382. def CreateEnemiesGenerator(nenemies = 4, enmonce = 2, SonidoGen = '..\\..\\Sounds\\M-GENERADOR-ENTIERRA3.wav'):
  383.     enmgen = EnmGenRnd()
  384.     enmgen.NEnemies = nenemies
  385.     enmgen.OnceEnm = enmonce
  386.     enmgen.SonidoGen = Sounds.CreateEntitySound(SonidoGen, 'GenTierra')
  387.     enmgen.SonidoGen.Volume = 0.3
  388.     enmgen.SonidoGen.MinDistance = 5000
  389.     enmgen.SonidoGen.MaxDistance = 20000
  390.     enmgen.CallBak = None
  391.     enmgen.OnEnd = None
  392.     return enmgen
  393.  
  394.  
  395. def CreateEnemy(pos, Name, Rage, WeaponType, WeaponBreak, ShieldType, ShieldBreak, Level = 0):
  396.     enm = Bladex.CreateEntity(Name, Rage, pos[0], pos[1], pos[2], 'Person')
  397.     enm.Blind = 1
  398.     enm.Deaf = 1
  399.     enm.Level = Level
  400.     if WeaponType:
  401.         weapon = Bladex.CreateEntity('Weapon' + Name, WeaponType, pos[0], pos[1], pos[2], 'Weapon')
  402.         ItemTypes.ItemDefaultFuncs(weapon)
  403.         Actions.TakeObject(Name, weapon.Name)
  404.     
  405.     if ShieldType:
  406.         shield = Bladex.CreateEntity('Shield' + Name, ShieldType, 0.0, 0.0, 0.0)
  407.         ItemTypes.ItemDefaultFuncs(shield)
  408.         Actions.TakeObject(Name, shield.Name)
  409.     
  410.     EnemyTypes.EnemyDefaultFuncs(enm)
  411.     enm.Data.Position = pos
  412.     darfuncs.HideBadGuy(enm.Name)
  413.     return enm
  414.  
  415.  
  416. def ActivateEnemy(enm):
  417.     enm.Position = enm.Data.Position
  418.     darfuncs.UnhideBadGuy(enm.Name)
  419.  
  420.